﻿using System.Linq;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Ioc;
using Mutzl.Samples.VideoApp.RssContent.Model;

namespace Mutzl.Samples.VideoApp.RssContent.ViewModel
{
    public class DetailViewModel : ViewModelBase
    {
        // Dieser Konstruktor ist nur für Designtime vorgesehen
        [PreferredConstructor]
        public DetailViewModel()
        {
            if (IsInDesignMode)
            {
                // ... und holt sich einfach das erste Video
                Video = Video.CreateDesignVideo();
            }

        }

        //// Zur Laufzeit kommt dieser Konstruktor ins Spiel
        //public DetailViewModel(string id)
        //{
        //    Video = Model.Video.GetVideos().SingleOrDefault(v => v.Id == id);
        //}

        public DetailViewModel(Video video) 
        {
            Video = video;

            Video.PropertyChanged += (sender, args) =>
                                         {
                                             switch (args.PropertyName)
                                             {
                                                 case "Duration": 
                                                     RaisePropertyChanged(() => Duration);
                                                     break;
                                                 case "Date":
                                                     RaisePropertyChanged(() => Date);
                                                     break;
                                             }
                                         };
        }

        private Video _video;
        public Video Video
        {
            get { return _video; }
            set
            {
                if (_video == value) return;
                _video = value;
                RaisePropertyChanged(() => Video);
            }
        }

        public string Duration { get { return string.Format("Dauer: {0}", Video.Duration); } }

        public string Date { get { return string.Format("Datum: {0:dd.MM.yyyy}", Video.Date); } }

        // Smooth Streaming wenn verfügbar. Ansonsten Fallback auf normales mp4.
        public string VideoPath { get { return Video.SmoothVideoPath ?? Video.VideoPath; } }

        public bool IsSmoothStreaming { get { return Video.SmoothVideoPath != null; }}

        private bool _isFullScreen;
        public bool IsFullScreen
        {
            get { return _isFullScreen; }
            set
            {
                if (_isFullScreen == value) return;
                _isFullScreen = value;
                RaisePropertyChanged(() => IsFullScreen);
            }
        }

    }
}